iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 1
1
自我挑戰組

資料結構大便當系列 第 1

[Day 1] Array 陣列這種東西

  • 分享至 

  • xImage
  •  

Array 這種東西,經典而入門,就像便當盒中的配菜,連續的被擺放在一起

Array 的好處就是當知道哪到菜在哪個空間時,可以已最快的 O(1) 取得,但如果要把一個配菜給清空,那就得花上一定的時間,當然多加一個菜色也是。

而在記憶體中,之所以為造成這樣的問題,是因為必須先產生一個新的 Array,並在複製過來,才會造成時間的消耗


例題 1:Find the Missing Number

一個經典的問題,給定一個從 1 到 n 的 Array,但有 1 個元素消失,可以利用 total = n*(n+1)/2 或是 bitwise 的作法,找出消失的元素,當然也可以暴力的利用建一個全新的 1 到 n 的 Array 並比較啦XD

做法 1:
利用總和找出少掉的數字

int missingNumber(vector<int> &nums)
{
    int total = (n + 1) * (n + 2) / 2; 
    for (int i = 0; i < n; i++) 
        total -= a[i]; 
    return total; 
}

做法 2:
先將 x1 與所有數做 XOR,再將 x2 與所有數 XOR,透過 XOR 的特性,會消去相同的數字,得到少掉的數字

int missingNumber(vector<int> &nums)
{
    int n = nums.size();

    int x1 = nums[0];
    for (int i = 1; i < n; i++)
        x1 = x1 ^ nums[i];
    
    int x2 = 1; // 若從 0 開始,改為 int x2 = 0;
    for (int i = 1; i <= n + 1; i++) // 若從 0 開始,i < n + 1
        x2 = x2 ^ i;

    return (x1 ^ x2);
}

下一篇
[Day 2] 從 Array 起步,認識 Insertion sort
系列文
資料結構大便當30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言